Instalando o Nagios Core 3.2, Nagios Plugins, NRPE, NSClient++, pnp4nagios e FrontEnd no Ubuntu 10.4 LTS

Nagios CoreGuia de instalação e configuração do Nagios Core 3.2 no Ubuntu 10.4 Server, juntamente com os plugins do Nagios Plugins e Nagios SNMP, os addons NRPE e NSClient++, o FrontEnd Nuvola e o pnp4nagios para a geração de gráficos.

Como uma grande necessidade das pequenas e grandes corporações, o monitoramento dos ativos e servidores vem sido cada vez mais utilizado devido aos inúmeros benefícios que a reação rápida a um problema ou incidente pode trazer.
Trago neste artigo uma completa solução de monitoramento dos servidores e ativos com base no poderoso Nagios Core.

Preparando o ambiente

Primeiro prepararemos o ambiente para receber a instalação do Nagios, porém é necessário que este já esteja com o LAMP (Linux, Apache, MySql e PHP) em pleno funcionamento.
Troque de usuário para o usuário root:

$ sudo -s

Atualize o sistema e instale os seguintes pacotes (instale o SSH somente se for utilizar realmente este para acesso remoto ao servidor):

# apt-get update
# apt-get upgrade
# apt-get install vim
# apt-get install ssh

Instale o compilador GCC e mais algumas bibliotecas necessárias como o OpenSSL para a comunicação do NRPE:

# apt-get install build-essential
# apt-get install libgd2-xpm-dev libsnmp-perl libssl-dev openssl libperl-dev

Instale o RRD-Tool:

# apt-get install librrds-perl rrdtool librrd-dev

Crie um diretório para o download dos arquivos do Nagios (lembrando que estamos no diretório do seu respectivo usuário, ex.: /home/carlao/):

# mkdir nagios

Faça o download do Nagios e dos plugins (utilizei aqui a ultima versão de cada item):

# wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.3.tar.gz
# wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz
# wget http://nagios.manubulon.com/nagios-snmp-plugins.1.1.1.tgz 

Instalando o Nagios

Adicione o usuário nagios ao sistema, utilize a senha que desejar:

# adduser nagios

Descompacte o Nagios Core, compile e faça a instalação deste:

# tar xzf nagios-3.2.3.tar.gz
# cd nagios-3.2.3
# ./configure --with-command-group=nagios
# make all
# make install
# make install-config
# make install-commandmode
# make install-init
# make install-webconf

Adicione o Nagios a inicialização do sistema:

# ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios

Usuário administrador do Nagios

Neste exemplo utilizaremos o usuário “catatau”, por padrão o Nagios já possui um usuário administrador que é o “nagiosadmin”, porém para maior segurança e adequação deste servidor de monitoramento a sua rede existente, é recomendado alterar este usuário.

Crie o arquivo de senhas do nagios e adicione o usuário “catatau” a este:

# htpasswd -c /usr/local/nagios/etc/htpasswd.users catatau

Altere as linhas do arquivo cgi.cfg que contenham o usuário “nagiosadmin” para o usuário escolhido como administrador do Nagios:

# vim /usr/local/nagios/etc/cgi.cfg

OBS.: Para efetuar a busca dentro do arquivo, aperte ESC e depois digite “/nagiosadmin” que irá buscar no arquivo pelo usuário.

Adicione o usuário nagios ao Apache:

# usermod –G nagios nagios
# usermod –G www-data,nagios www-data
# /etc/init.d/apache2 reload

Instalando os plugins

Acesse novamente o diretório que você havia criado para salvar os arquivos do Nagios:

# cd /home/carlao/nagios

Descompacte e instale os arquivos do Nagios-Plugins:

# tar xzf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins-1.4.15
# ./configure
# make
# make install

Altere o “dono” dos seguintes diretórios para o usuário nagios:

# chown nagios:nagios /usr/local/nagios
# chown –R nagios:nagios /usr/local/nagios/libexec

Verifique se não há nenhum erro nas configurações do Nagios:

# /usr/local/nagios/bin/nagios –v /usr/local/nagios/etc/nagios.cfg

OBS.: Guarde este comando, pois ele sempre será útil.

Acesse pelo navegador o endereço do servidor Nagios, e verifique se esta tudo ok.:

http://ip_do_servidor/nagios

Configurando o monitoramento

Primeiro configuraremos os parâmetros simples para o monitoramento do Nagios, para posteriormente instalarmos os addos de checagens.

Adicione as variáveis ao resouce.cfg

O arquivo resource.cfg é responsável por armazenar as configurações referentes as variáveis que serão utilizados para a checagem do Nagios, estas variáveis devem ser definidos para cada função específica pois elas serão utilizadas no arquivo commands.cfg.

# vim /usr/local/nagios/etc/resource.cfg

Para que possamos efetuar as checagens utilizando o SNMP, será necessário definir neste arquivo a comunidade SNMP utilizada em sua rede, utilizaremos aqui por default a comunidade “public”, adicione o seguinte conteúdo ao final deste arquivo:

$USER7$=-C public
$USER8$=public

Agora configuraremos os arquivos secundários, onde estarão as informações que utilizaremos posteriormente nos arquivos de monitoramento dos hosts. Para tal, acesse o diretório objects dentro do diretório Nagios:

# cd /usr/local/nagios/etc/objects/

Já dentro do diretório objects, faça o backup do arquivo commands.cfg e crie um novo arquivo com o mesmo nome. O arquivo commands.cfg é responsável por armazenar as informações de checagem dos serviços, ligando os comandos fornecidos nos arquivos de checagem dos servidores aos plugins existentes no servidor Nagios:

# mv commands.cfg commands.cfg.bkp
# vim commands.cfg

Exemplo de configuração do arquivo commands.cfg:

###############################################################################
# Arquivo commands.cfg > Por Rafael Oliveira em 15/12/2010
#
################################################################################

#Notificacao por email
define command{
	command_name	notify-host-by-email
	command_line	/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nEstado: $HOSTSTATE$\nIP: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/email -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
	}

define command{
	command_name	notify-service-by-email
	command_line	/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/email -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
	}

################################################################################
#
# Checagem simples
#
################################################################################

# 'check-host-alive' command definition
define command{
        command_name    check-host-alive
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
        }

################################################################################
#
# Checando os principais servicos LOCAIS
#
################################################################################

# Local HDD
define command{
        command_name    check_local_disk
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
        }

# LOAD
define command{
        command_name    check_local_load
        command_line    $USER1$/check_load -w $ARG1$ -c $ARG2$
        }

# PROCESS
define command{
        command_name    check_local_procs
        command_line    $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
        }

# USERS
define command{
        command_name    check_local_users
        command_line    $USER1$/check_users -w $ARG1$ -c $ARG2$
        }

# SWAP
define command{
	command_name	check_local_swap
	command_line	$USER1$/check_swap -w $ARG1$ -c $ARG2$
	}

# MRTGTRAF
define command{
	command_name	check_local_mrtgtraf
	command_line	$USER1$/check_mrtgtraf -F $ARG1$ -a $ARG2$ -w $ARG3$ -c $ARG4$ -e $ARG5$
	}

################################################################################
#
#	Checagem dos servicos
#
################################################################################

# FTP
define command{
        command_name    check_ftp
        command_line    $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$
        }

# HPJD
define command{
        command_name    check_hpjd
        command_line    $USER1$/check_hpjd -H $HOSTADDRESS$ $ARG1$
        }

# SNMP
define command{
        command_name    check_snmp
        command_line    $USER1$/check_snmp -H $HOSTADDRESS$ $ARG1$
        }

# HTTP
define command{
        command_name    check_http
        command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
        }

# SSH
define command{
	command_name	check_ssh
	command_line	$USER1$/check_ssh $ARG1$ $HOSTADDRESS$
	}

# DHCP
define command{
	command_name	check_dhcp
	command_line	$USER1$/check_dhcp $ARG1$
	}

# PING
define command{
	command_name    check_ping
	command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }

# PING GOOGLE
define command{
	command_name	check_google
	command_line	$USER1$/check_ping -H www.google.com.br -w 60,70% -c 80,90%
	}

# POP
define command{
	command_name    check_pop
	command_line    $USER1$/check_pop -H $HOSTADDRESS$ $ARG1$
        }

# IMAP
define command{
	command_name    check_imap
	command_line    $USER1$/check_imap -H $HOSTADDRESS$ $ARG1$
        }

# SMTP
define command{
	command_name    check_smtp
	command_line    $USER1$/check_smtp -H $HOSTADDRESS$ $ARG1$
        }

# TCP
define command{
	command_name	check_tcp
	command_line	$USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$
	}

# UDP
define command{
	command_name	check_udp
	command_line	$USER1$/check_udp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$
	}

# NT
define command{
	command_name	check_nt
	command_line	$USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
	}

################################################################################
#
# PERFORMANCE DATA COMMANDS
#
################################################################################

# HOST PERF-DATA
#define command{
#	command_name	process-host-perfdata
#	command_line	/usr/bin/printf "%b" "$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n" >> /usr/local/nagios/var/host-perfdata.out
#	}
#
#
# SERVICE PERF-DATA
#define command{
#	command_name	process-service-perfdata
#	command_line	/usr/bin/printf "%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n" >> /usr/local/nagios/var/service-perfdata.out
#	}

# PNP4NAGIOS
define command {
       command_name    process-service-perfdata
       command_line    /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl
}

define command {
       command_name    process-host-perfdata
       command_line    /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA
}

################################################################################
#
# Checagens SNMP
#
################################################################################

define command{
	command_name check_snmp_load_v1
	command_line $USER1$/check_snmp_load.pl -H $HOSTADDRESS$ $USER7$ -T $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
	}

define command{
	command_name check_snmp_int_v1
	command_line $USER1$/check_snmp_int.pl -H $HOSTADDRESS$ $USER7$ -n $ARG1$ $ARG2$
	}

define command{
	command_name check_snmp_mem_v1
	command_line $USER1$/check_snmp_mem.pl -H $HOSTADDRESS$ $USER7$ $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
	}

define command{
	command_name check_snmp_storage_v1
	command_line $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ $USER7$ -m $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
	}

define command{
	command_name check_snmp_hpux_storage_v1
	command_line $USER1$/check_snmp_hpux_storage.pl -H $HOSTADDRESS$ $USER7$ -m $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
	}

define command{
	command_name check_snmp_hpux_mem_v1
	command_line $USER1$/check_snmp_hpux_mem.sh $USER8$ $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$ $ARG4$
	}

define command{
	command_name check_snmp_v1
	command_line $USER1$/check_snmp -H $HOSTADDRESS$ $USER7$ -o $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
	}

define command{
	command_name check_snmp_process_v1
	command_line $USER1$/check_snmp_process.pl -H $HOSTADDRESS$ $USER7$ -n $ARG1$ -w $ARG2$ -c $ARG3$ $ARG4$
	}

define command{
	command_name check_win
	command_line $USER1$/check_snmp_win.pl -H $HOSTADDRESS$ $USER7$ -n $ARG1$ $ARG2$
	}

######################################## FIM SNMP ######################################

################################################################################
#
# COMANDOS ADICIONAIS
#
################################################################################

# DISCO
define command{
	command_name check_disk
	command_line $USER1$/check_disk -w limit -c limit -t 5
	}

# IMPRESSORA HP
define command{
	command_name check_hp_print
	command_line $USER1$/check_hp_print -H $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$ $ARG4$ $ARG5$ $ARG6$
	}

# TERMINAL SERVICE
define command{
	command_name check_ts
	command_line $USER$/check_ts -H $HOSTADDRESS$ -p 3389
	}

# PRINTERS
define command{
	command_name check_printer
	command_line $USER1$/check_printer $HOSTADDRESS$ $USER8$ $ARG1$ $ARG2$ $ARG3$ $ARG4$
	}

# WIRETEMP
define command{
	command_name check_1-wiretemp
    	command_line $USER1$/custom/check_1-wiretemp -c $ARG1$ -w $ARG2$ -W$ARG3$ -C$ARG4$ -i $ARG5$ -o $ARG6$
    }

# NRPE
define command{
	command_name check_nrpe
	command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

# OPENVPN
define command{
	command_name check_openvpn
	command_line /usr/lib/nagios/plugins/check_openvpn -t $ARG1$ -p $ARG2$ -n $ARG3$
}

# SQUID
define command{
	command_name check_squid
	command_line $USER1$/check_squid.pl -u http://www.google.com.br -p $HOSTADDRESS$ -l 8080 -o usuario -m senha -e 200
        }

# SAMBA
define command{
	command_name check_samba
	command_line $USER1$/check_samba -L $HOSTADDRESS$
}

# WINTEMP
define command{
	command_name check_snmp_wintemp
	command_line $USER1$/check_snmp_wintemp -L $HOSTADDRESS$
}

# 3COM
define command{
	command_name check_3com
	command_line $USER1$/check_3com.pl -H $HOSTADDRESS$ -C $ARG1$ -u $ARG2$
        }

# SWITCH UPTIME
define command {
	command_name check_switch_uptime
	command_line $USER1$/check_switch_uptime.pl -H $HOSTADDRESS$ -C $ARG1$ -w $ARG2$ -c $ARG3$
}

# MEMORIA
define command {
	command_name check_mem
	command_line $USER1$/check_mem -w $ARG1$ -c $ARG2$
}

# MRTG
define command {
	command_name check_mrtgtraf
	command_line $USER1$/check_mrtgtraf -F $ARG1$ -a $ARG2$ -w $ARG3$ -c $ARG4$ -e $ARG5$
}

# NAGIOSGRAPHER
define command{
	command_name process-service-perfdata-file
	command_line mv /usr/local/nagios/var/service-perfdata /usr/local/nagios/var/service-perfdata.$TIMET$
}

Ainda no diretório objects, faça o backup do arquivo timeperiods.cfg e crie um novo arquivo com o mesmo nome. O arquivo timeperiods.cfg é responsável por armazenar as informações relativas as períodos de tempos utilizados na checagem, os períodos de tempos setados aqui, serão utilizados na configuração de cada serviço nos arquivos de checagem dos servidores:

# mv timeperiods.cfg timeperiods.cfg.bkp
# vim timeperiods.cfg

Exemplo de configuração do arquivo timeperiods.cfg:

###############################################################################
#
# Arquivo TIMEPERIODS.cfg > Por Rafael Oliveira em 15/12/2010
#
###############################################################################

# TEMPO INTEGRAL 24x7
define timeperiod{
        timeperiod_name 		24x7
        alias			24 Hours A Day, 7 Days A Week
        sunday         		00:00-24:00
        monday       		00:00-24:00
        tuesday        		00:00-24:00
        wednesday  		00:00-24:00
        thursday       		00:00-24:00
        friday            		00:00-24:00
        saturday       		00:00-24:00
        }

# HORARIO DE TRABALHO TOTAL
define timeperiod{
	timeperiod_name	workhours
	alias			Normal Work Hour
	monday		09:00-21:00
	tuesday			09:00-21:00
	wednesday		09:00-21:00
thursday		09:00-21:00
	friday			09:00-21:00
	}

# HORARIO COMERCIAL
define timeperiod{
        timeperiod_name 		comercial
        alias           			Horario Comercial
        monday          		08:00-17:40
        tuesday         		08:00-17:40
        wednesday       		08:00-17:40
        thursday        		08:00-17:40
        friday          			08:00-17:40
        }

# NONE
define timeperiod{
	timeperiod_name	none
	alias			No Time Is A Good Time
	}

Faça o backup também do arquivo contacts.cfg, e crie um arquivo em branco com o mesmo nome. Este arquivo é responsável por armazenar as informações dos grupos e contatos que receberão os e-mails de alertas do Nagios. Com isso é possível que somente um determinado grupo de usuários do Nagios receba por exemplo notificações de que serviços críticos ou servidores saíram do ar, assim dimensionando os alertas para cada camada do respectivo departamento ou filial:

# mv contacts.cfg contacts.cfg.bkp
# vim contacts.cfg

Exemplo de configuração do arquivo contacts.cfg:

###############################################################################
#
# Arquivo contacts.cfg > Por Rafael Oliveira em 15/12/2010
#
###############################################################################

# CONTATOS
define contact{
        contact_name            	nagios	# Nome do usuario
        use                     		generic-contact
        alias                   		Nagios Admin
        email                   		suporte@dominio.com.br 	# Email do usuário que recebera as notoficacoes
}

# GRUPOS DE CONTATOS
define contactgroup{
        contactgroup_name       	admins
        alias                   		Nagios Administrators
        members                 		nagios
        }

Instalando os Addons

O NRPE (Nagios Remote Plugin Execute) será responsável pelas checagens dos nossos sistemas Unix, para tal é necessário instalar este no servidor a ser monitorado e no servidor Nagios.

Instale o Xinetd:

# apt-get install xinetd

Faça o download do source do NRPE:

# wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz

Descompacte e instale o NRPE:

# tar xzf nrpe-2.12.tar.gz
# cd nrpe-2.12
# ./configure
# make all
# make install
# make install-daemon
# make install-daemon-config
# make install-xinetd

Edite o arquivo de configuração do NRPE, adicionando logo após o endereço local do host (127.0.0.1), o endereço ip do servidor Nagios ou a range da rede onde esta o servidor Nagios:

# vim  /etc/xinetd.d/nrpe
...
   only_from = 127.0.0.1 192.168.1.0
...

Adicione a porta do serviço NRPE ao sistema:

# vim /etc/services
...
nrpe	5666/tcp	# NRPE
…

Reinicie o serviço do Xinetd:

# /etc/init.d/xinetd restart

Teste o funcionamento do NRPE:

# /usr/local/nagios/libexec/check_nrpe –H localhost

O retorno deve ser:

NRPE v2.12

Agora, instale o plugin do NRPE também no servidor Nagios:

Faça o download do source do NRPE:

# wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz

Descompacte e instale o NRPE:

# tar xzf nrpe-2.12.tar.gz
# cd xzf nrpe-2.12
# ./configure
# make all
# make install-plugin

Instale o SNMP no servidor Nagios

# cd..
# apt-get install snmp
# apt-get install snmpd
# wget http://downloads.sourceforge.net/net-snmp/net-snmp-5.6.1.tar.gz
# tar xzf net-snmp-5.6.tar.gz
# cd net-snmp-5.6
# ./configure
# make
# make install
# cd ..
# tar xzf nagios-snmp-plugins.1.1.1.tgz –C /usr/src/
# cd /usr/src/nagios_plugins
#./install.sh

Teste o funcionamento do plugin no servidor:

# /usr/local/nagios/libexec/check_nrpe –H NRPE v2.12

Adicionando servidores Linux ao Nagios

Para melhor organização, crie alguns diretórios dentro do diretório /usr/local/nagios/etc, onde serão armazenados os arquivos de configurações dos servidores e ativos monitorados, neste caso monitoraremos nossos servidores, switchs e impressoras de rede:

# cd /usr/local/nagios/etc/
# mkdir servidores switchs printers

Acesse o diretório “servidores” que você havia criado:

# cd /usr/local/nagios/etc/servidores

Agora, crie um arquivo com o nome do servidor a ser monitorado, como exemplo utilizaremos o servidor “srv-linux”:

# vim srv-linux.cfg

Vou descrever algumas definições que podem ser utilizadas no arquivo de monitoramento de um servidor Linux, tentarei explicar ao máximo possível cada linha.

A primeira configuração que deve ser adicionada ao arquivo de monitoramento do servidor é a Definição do Host:

### Definicoes do Host ###
define host{
       use 				generic-host
       host_name			srv-linux            # Nome do servidor
       alias			Servidor Linux            # Nome que aparecera na interface web do Nagios
       address                 		192.168.3.40      # Endereco ip do servidor a ser monitorado
       parents		       	3Com_4200,srv-proxy   # Switchs ou pontos que este servidor estará interligado diretamente
       check_command          	check-host-alive  # Definido no commands.cfg este checa o ping do servidor
       max_check_attempts      	2                 # Numero de checagens necessarias para definir o real estado do serviço
       check_interval          		1                 # Checagem do serviço média de 5 minutos em condições normais
       notification_interval   	1                 # Tempo de re-notificacao sobre os problemas de um servico em minutos
       notification_period     	24x7              # Variavel definida no arquivo timeperiods.cfg
       notification_options    	d,u,r             # d = Down, u = Unreachable e r = Recovered
       contact_groups          	admins            # Grupo de contatos que receberam notificacoes para este servidor
}

Definição do Grupo

No arquivo de configuração do servidor, deve ser adicionada a informação de qual grupo este servidor pertencerá, esta configuração é efetuada em apenas um dos arquivos de configuração dos servidores pertencentes a este grupo, sendo que nesta configuração serão adicionados todos os nomes dos servidores pertencentes a este grupo, como no exemplo a seguir:

### Grupo ###
define hostgroup{
        hostgroup_name  		linux-servers 	# Nome do grupo sem espacos
        alias           			Servidores Linux 	# Nome visivel do grupo que aparecera na interface web do Nagios
        members         		srv-linux,srv-linux_2 	# Nome dos servidores pertencentes a este grupo
         }

Plugins – Ping

É recomendado efetuar uma segunda secagem do ping do servidor, além da efetuada pelo check-host-alive como vemos a seguir (esta será utilizada para a geração de gráficos pelo pnp4nagios):

### PING ###
define service{
       host_name                       	srv-linux	# O nome do ativo a ser monitorado
       service_description             	PING	# Nome do serviço que aparecerá na interface web do Nagios
       check_command                   	check_ping!5000.0,80%!8000.0,100%	# Comando que foi configurado no arquivo commands.cfg
       max_check_attempts             2	# Numero de checagens necessárias para definir o real estado do serviço
       normal_check_interval          1	# Tempo em minutos entre as checagens ao serviço
       retry_check_interval            	1	# Tempo de checagem do serviço se este estiver em WARNING ou CRITICAL
       check_period                    	24x7	# Este é o período de checagem do serviço, este período deve estar definido no arquivo timeperiods.cfg como uma variável
       notification_interval           	30	# Este é o período de checagem do serviço, este período deve estar definido no arquivo timeperiods.cfg como uma variável
       notification_period             	24x7	# Este é o período de checagem do serviço, este período deve estar definido no arquivo timeperiods.cfg como uma variável
       notification_options            	w,c,r 	# W = Warning, C = Critical, R = Recovered e u=UNKDOWN
       contact_groups                  	admins	# O grupo de contatos que receberá as notificações deste serviço, este é definido no arquivo contacts.cfg
}

Processos

Checa a quantidade de processos que estão rodando no servidor:

### Servicos ###
define service{
       host_name                       	srv-linux
       service_description             	Total de Processos
       check_command                   	check_nrpe!check_total_procs
       max_check_attempts           	2
       normal_check_interval         	1
       retry_check_interval            	10
       check_period                    	24x7
       notifications_enabled	0	# Desabilita a notificação do serviço por email
}

Processador

Checa a quantidade de processador utilizada pelo servidor em %:

### CPU LOAD ###
define service{
       host_name                       	srv-linux
       service_description             	CPU Load
       check_command                   	check_nrpe!check_load
       max_check_attempts            	2
       normal_check_interval         	1
       retry_check_interval            	1
       check_period                    	24x7
       notification_interval           	30
       notification_period             	24x7
       notification_options            	w,c,r
       contact_groups                  	admins
}

Espaço em DISCO (HD)

Checa o espaço total do disco e o espaço disponível deste:

### HD ###
define service{
       host_name                       	srv-linux
       service_description             	HD
       check_command                   	check_nrpe!check_hda1
       max_check_attempts            	2
       normal_check_interval         	1
       retry_check_interval           	1
       check_period                    	24x7
       notification_interval           	30
       notification_period             	24x7
       notification_options            	w,c,r
       contact_groups                  	admins
}

Memória RAM

Checa a quantidade de memória RAM utilizada pelo sistema remoto, ele também checa a SWAP do sistema:

### Memoria ###
define service{
       host_name                       	srv-linux
       service_description             	Memoria
       check_command                   	check_nrpe!check_mem
       max_check_attempts            	2
       normal_check_interval         	1
       retry_check_interval            	1
       check_period                    	24x7
       notification_interval           	30
       notification_period             	24x7
       notification_options            	w,c,r
       contact_groups                  	admins
}

Uptime</h3

Checa o tempo que o servidor esta em funcionamento desde a sua ultima reinicialização:

### UPTime ###
define service{
       host_name                       	srv-linux
       service_description             	UPTime
       check_command                   	check_nrpe!check_uptime
       max_check_attempts            	2
       normal_check_interval         	1
       retry_check_interval            	1
       check_period                    	24x7
       notification_interval           	30
       notification_period             	24x7
       notification_options            	w,c,r
       contact_groups                  	admins
}

SSH

Checa se o serviço de SSH esta rodando no servidor:

### SSH ###
define service{
       host_name                       	srv-linux
       service_description             	SSH
       check_command                   	check_ssh! -t 50
       max_check_attempts            	2
       normal_check_interval         	1
       retry_check_interval            	1
       check_period                    	24x7
       notification_interval           	30
       notification_period             	24x7
       notification_options            	w,c,r
       contact_groups                  	admins
}

Apache (HTTP)

Checa se o serviço http do Apache esta rodando:

### HTTP ###
define service{
       host_name                       	srv-linux
       service_description             	Apache
       check_command                   	check_http
       max_check_attempts            	2
       normal_check_interval         	1
       retry_check_interval            	1
       check_period                    	24x7
       notification_interval           	30
       notification_period             	24x7
       notification_options            	w,c,r
       contact_groups                  	admins
}

BIND

Checa se o serviço de DNS Bind esta rodando no servidor:

### BIND ###
define service{
       host_name                       	srv-linux
       service_description             	DNS Bind
       check_command                   	check_nrpe!check_bind
       max_check_attempts            	2
       normal_check_interval         	1
       retry_check_interval            	1
       check_period                    	24x7
       notification_interval           	30
       notification_period             	24x7
       notification_options            	w,c,r
       contact_groups                  	admins
}

Samba

Checa se o serviço do Samba esta rodando no servidor:

### SAMBA ###
define service{
       host_name                       	srv-linux
       service_description             	Samba Service
       check_command                   	check_samba
       max_check_attempts           	2
       normal_check_interval         	1
       retry_check_interval            	1
       check_period                    	24x7
       notification_interval           	30
       notification_period             	24x7
       notification_options            	w,c,r
       contact_groups                  	admins
}

Adicionando servidores Windows ao Nagios

Acesse o diretório “servidores” do Nagios:

# cd /usr/local/nagios/etc/servidores/

Crie um arquivo com o nome do servidor a ser monitorado, neste exemplo utilizaremos o servidor “srv-ruindows”:

# vim srv-ruindows.cfg

As informações de checagem são basicamente as mesmas do arquivo de checagem Linux, altere somente os plugins utilizados para fazer esta e também o fato deste não utilizar o NRPE para a checagem, e sim o NSCLIENT++.
Segue um exemplo de arquivo de checagem Windows:

### Definicoes do Host ###
define host{
       use                     		generic-host
       host_name               		srv-ruindows
       alias                  		Servidor Ruindows
       address                 		192.168.3.42
       parents                 		3Com_4200
       check_command           	check-host-alive
       max_check_attempts      	2
       check_interval          		1
       notification_interval   	1
       notification_period     	24x7
       notification_options   	d,u,r
       contact_groups          	admins
}

### PING ###
define service{
       host_name                       	srv-ruindows
       service_description             	PING
       check_command                   	check_ping!5000.0,80%!8000.0,100%
       max_check_attempts             2
       normal_check_interval          1
       retry_check_interval            	1
       check_period                    	24x7
       notification_interval           	30
       notification_period             	24x7
       notification_options            	w,c,r
       contact_groups                  	admins
}

### Versao do NSCLIENT ###
define service{
        use                             		generic-service
        host_name                       	srv-ruindows
        service_description             	Versao do NSClient
        check_command                  	check_nt!CLIENTVERSION
        max_check_attempts           	2
        normal_check_interval         1
        retry_check_interval            	10
        check_period                    	24x7
        notification_interval           	120
        notification_period             	24x7
        notification_options            	w,c,r
        contact_groups                  	admins
}

### UPTIME ###
define service {
        use                             		generic-service
        host_name                       	srv-ruindows
        service_description             	Uptime
        check_command                   check_nt!UPTIME
        max_check_attempts           	2
        normal_check_interval         1
        retry_check_interval            	10
        check_period                    	24x7
        notification_interval           	120
        notification_period             	24x7
        notification_options           	w,c,r
        contact_groups                  	admins
}

### MEMORIA RAM ###
define service {
        use                             		generic-service
        host_name                       	srv-ruindows
        service_description             	Memoria RAM
        check_command                   	check_nt!MEMUSE! -w 80 -c 90
        max_check_attempts           	2
        normal_check_interval        	1
        retry_check_interval            10
        check_period                    	24x7
        notification_interval           	120
        notification_period             	24x7
        notification_options            	w,c,r
        contact_groups                  	admins
}

### DISCO C: ###
define service {
        use                             		generic-service
        host_name                       	srv-ruindows
        service_description             	Disco C:
        check_command                  	check_nt!USEDDISKSPACE!-l c -w 80 -c 90
        max_check_attempts           	2
        normal_check_interval        	1
        retry_check_interval            	10
        check_period                    	24x7
        notification_interval           	120
        notification_period             	24x7
        notification_options            	w,c,r
        contact_groups                  	admins
}

### DISCO D: ###
define service {
        use                             		generic-service
        host_name                       	srv-ruindows
        service_description             	Disco D:
        check_command                   check_nt!USEDDISKSPACE!-l d -w 80 -c 90
        max_check_attempts           	2
        normal_check_interval         1
        retry_check_interval            	10
        check_period                    	24x7
        notification_interval           	120
        notification_period             	24x7
        notification_options            	w,c,r
        contact_groups                  	admins
}

### PROCESSADOR ###
define service {
        use                             		generic-service
        host_name                       	srv-ruindows
        service_description             	CPU Load
        check_command                   check_nt!CPULOAD!-l 5,80,90 -w 80 -c 90
        max_check_attempts           	2
        normal_check_interval        	1
        retry_check_interval            	10
        check_period                    	24x7
        notification_interval           	120
        notification_period             	24x7
        notification_options            	w,c,r
        contact_groups                  	admins
}

### PROCESSO ###
define service {
        use                              	generic-service
        host_name                        	pabx
        service_description              	Explorer
        check_command                  	check_nt!PROCSTATE!-l explorer.exe
        normal_check_interval       	10
        retry_check_interval            	10
        max_check_attempts           	2
        notifications_enabled          	0
}

Adicionando impressoras de rede ao Nagios

Para o monitoramento de impressoras pelo Nagios, utilizaremos o plugin “check_printer”, assim, faça o download deste arquivo e de permissão de execução para ele:

# wget http://www.ciphron.de/gfx/pool/check_printer
# mv check_printer /usr/local/nagios/libexec/check_printer
# chmod +x /usr/local/nagios/libexec/check_printer

Feito isso, faça os teste com a impressora a ser monitorada para saber que opções de monitoramento esta possibilitará. Acesse o diretório printers, e execute:

# ./check_printer

Este comando trará todas as possiblidades de o script possui de monitoramento, assim teste cada um dos comandos na impressora escolhida para descobrir quais irão ou não funcionar nesta, a sintaxe básica do comando é:

#./check_printer    

Para checar por exemplo o contador de páginas de uma impressora, execute:

#./check_printer 192.168.3.100 public counter 1

Realizado os testes, entre no diretório “printers” criado anteriormente e crie um arquivo com o nome da impressora a ser monitorada, neste exemplo utilizaremos a impressora “hp_producao”:

# cd /usr/local/nagios/etc/printers
# vim hp_producao.cfg

Com base nos testes realizados anteriormente com o plugin, adicione os monitoramentos validos a este arquivo de acordo com cada impressora, como no exemplo a seguir:

###############################################################################
#
# Arquivo de monitoramento de IMPRESSORA > Por Rafael Oliveira em 28/12/2010
#
###############################################################################

# DEFINICAO DA IMPRESSORA

define host{
use				generic-printer
host_name			hp_producao
alias				Impressora HP Producao
address				192.168.3.100
parents				3Com_4200
check_interval                  1
retry_check_interval            10
check_period                   	workhours
notification_interval           120
notification_period             workhours
notification_options            d,u,r
contact_groups                  admins
hostgroups			network-printers
	}

# CHECAGEM DOS SERVICOS
#
# PING

define service{
	use				generic-service
	host_name			hp_producao
	service_description		PING
	check_command		        check_ping!3000.0,80%!5000.0,100%
	normal_check_interval		1
	retry_check_interval		10
        max_check_attempts              2
        notification_interval           120
        notification_options           	c,r
        contact_groups                  admins
	notification_period	        workhours
        }

 # FOLHAS IMPRESSAS

 define service{
        use                     	generic-service
        host_name               	hp_producao
        service_description     	Folhas Impressas
        check_command           	check_printer!counter 1
        normal_check_interval   	1
        retry_check_interval    	10
	max_check_attempts              2
       	notifications_enabled		0
	}

# Parts Status

 define service{
        use                     	generic-service
        host_name               	hp_producao
        service_description     	Parts Status
        check_command           	check_printer!parts 1
        normal_check_interval   	1
        retry_check_interval    	10
	max_check_attempts           	2
        notifications_enabled		0
        	}

# Port Status

define service{
        use                     	generic-service
        host_name               	hp_producao
       	service_description     	Port Status
        check_command           	check_printer!parts 2
        normal_check_interval   	1
        retry_check_interval    	10
	max_check_attempts           	2
        notifications_enabled		0
       	}

# Toners Status
## Cyano
define service{
        use                     	generic-service
        host_name               	hp_producao
        service_description     	Toner Cyano
        check_command           	check_printer!toner/ink 1!0.5,0.8
        normal_check_interval   	1
        retry_check_interval    	10
	max_check_attempts           	2
        notifications_enabled		0
        	}

## Magenta
define service{
        use                     	generic-service
        host_name               	hp_producao
        service_description     	Toner Magenta
        check_command           	check_printer!toner/ink 2!0.5,0.8
        normal_check_interval   	1
        retry_check_interval    	10
	max_check_attempts           	2
        notifications_enabled		0
        	}

## Amarelo
define service{
        use                     	generic-service
        host_name               	hp_producao
        service_description     	Toner Amarelo
        check_command           	check_printer!toner/ink 3!0.5,0.8
        normal_check_interval   	1
        retry_check_interval    	10
	max_check_attempts           	2
        notifications_enabled		0
       	}

## Preto
define service{
        use                     	generic-service
       	host_name               	hp_producao
        service_description     	Toner Preto
        check_command           	check_printer!toner/ink 4!0.5,0.8
        normal_check_interval   	1
        retry_check_interval    	10
	max_check_attempts           	2
        notifications_enabled		0
        	}

# Reservatorio de Residuos
define service{
        use                     	generic-service
        host_name               	hp_producao
        service_description     	Reservatorio de Residuos
        check_command           	check_printer!toner/ink 5!0.5,0.8
        normal_check_interval   	1
        retry_check_interval    	10
	max_check_attempts           	2
        notifications_enabled		0
        	}

Adicionando ativos de rede ao Nagios

O Nagios também possui dezenas de plugins (não por padrão) para o monitoramento de ativos de rede, como switchs, roteadores e afins. Destes podemos extrair informações de portas, processamento, tempo ativo, ips ativos, dentre outras informações, porém isto dependerá do gerenciamento que cada ativo possibilita.

Acesse o diretório “switchs” criado anteriormente:

# cd /usr/local/etc/switchs/

Crie neste diretório o arquivo correspondente ao ativo a ser monitorado, no exemplo utilizaremos a switch “3Com_4200”:

# vim 3Com_4200

Adicione a este arquivo as checagens necessárias, como no exemplo a seguir:

###############################################################################
#
# Arquivo de monitoramento de SWITCH > Por Rafael Oliveira em 29/12/2010
#
###############################################################################

# DEFINICOES DA SWITCH
define host{
	use				generic-switch
	host_name			3Com_4200
	alias				Switch 3Com 4200 50 portas
	address				192.168.3.200
	parents				3Com_4200
	max_check_attempts              	2
	check_interval                  	10
	retry_check_interval            	10
	check_period                    	workhours
	notification_interval           	60
	notification_period             	workhours
	notification_options            	d,u,r
	contact_groups                  	admins
	hostgroups			switches
	}

###############################################################################
# DEFINICOES DO GRUPO
###############################################################################
# A definição do grupo de Switchs funciona da seguinte forma, este grupo é adicionado
# a um dos arquivos de monitoramento, e nos outros arquivos é adicionado a linha
# hostgroups na definição do host como esta acima, seguido do nome do grupo definido aqui

define hostgroup{
	hostgroup_name		switches
	alias				Network Switches
	}

# CHECAGEM DOS SERVICOS
#
# PING
define service{
	use				generic-service
	host_name			3Com_4200
	service_description		PING
	check_command		check_ping!200.0,20%!600.0,60%
	max_check_attempts              	2
	normal_check_interval           	10
	retry_check_interval            	10
	check_period                    	workhours
	notification_interval           	120
	notification_period             	workhours
	notification_options            	w,c,r
	contact_groups                  	admins
	}

# UPTIME
define service {
        	use                     			generic-service
        	host_name               		3Com_4200
        	service_description     		Uptime
        	check_command           		check_switch_uptime!public!80!90
	max_check_attempts              	2
	normal_check_interval           	10
	retry_check_interval            	10
	check_period                    	workhours
	notification_interval           	120
	notification_period             	workhours
	notification_options            	w,c,r
	contact_groups                  	admins
	}

No exemplo acima utilizamos o plugin “check_switch_uptime”, faça o download do script e execute os mesmos passos do plugin check_printer, copie este para o diretório libexec e dê permissão de execução para o arquivo do plugin:

# wget https://www.monitoringexchange.org/attachment/download/Check-Plugins/Hardware/Network/Switch-%2526-Router/Uptime-of-router-or-switch/check_uptime.pl
# mv check_uptime.pl /usr/local/nagios/libexec/check_switch_uptime.pl
# chmod +x /usr/local/nagios/libexec/check_switch_uptime.pl

Ativando o monitoramento

Após criar os arquivos de monitoramento dos hosts, adicione estes arquivos ao arquivo nagios.cfg para que o Nagios consiga efetuar a leitura destes arquivos:

# vim /usr/local/nagios/etc/nagios.cfg

Adicione as seguintes linhas a este arquivo, logo após a linha “log_file”:

####################################################################
#                          			SERVIDORES                             			#
####################################################################
#
cfg_file=/usr/local/nagios/etc/servidores/srv-linux.cfg
cfg_file=/usr/local/nagios/etc/servidores/srv-ruindows.cfg
#
####################################################################
#                            		 SWITCHS                              			#
####################################################################
#
cfg_file=/usr/local/nagios/etc/switchs/3Com_4200.cfg
#
####################################################################
#                          			IMPRESSORAS                            			 #
####################################################################
#
cfg_file=/usr/local/nagios/etc/printers/hp_producao.cfg
#

Agora, adicione os hosts monitorados ao arquivo hostextinfo.cfg, este arquivo será responsável pelos ícones exibidos na interface web do Nagios, assim como as coordenadas definidas na Status Map e 3D Map:

# vim /usr/local/nagios/etc/hostextinfo.cfg

Adicione os hosts a este arquivo:

define hostextinfo{
      host_name       		srv-linux	# Nome do host
      notes_url      		http://192.168.3.40:1000	# Endereco Webmin do host
      icon_image      		ubuntu.png	# Imagem utilizada nas propriedades do ativo
      icon_image_alt  		Ubuntu		# Texto exibido ao passar o mouse em cima do icone do ativo
      vrml_image      		ubuntu.png	 # Imagem utilizada no statusmap
      statusmap_image 		ubuntu.gd2 	# Imagem também utilizada no statusmap, porém comprimida para reduzir o consumo de CPU do servidor
      2d_coords       		500,500  	# Coordenadas geográficas para a alocação dos hosts no StatusMap
      3d_coords       		300.0,50.0,75.0		# Coordenadas 3D para a alocação dos hosts no 3D Map
      }

define hostextinfo{
      host_name      		 srv-ruindows
#      notes_url       		http://		# Windows não possui interface web
      icon_image      		vista.png
      icon_image_alt  		Windows_Server_2008
      vrml_image      		vista.png
      statusmap_image 		vista.gd2
      2d_coords       		100,400
      3d_coords       		200.0,50.0,75.0
      }

define hostextinfo{
      host_name       		3Com_4200
      notes_url       		http://192.168.3.200
      icon_image      r		switch.png
      icon_image_alt  		3Com_4200
      vrml_image      		switch.png
      statusmap_image 		switch.gd2
      2d_coords       		400,700
      3d_coords       		200.0,50.0,75.0
      }

define hostextinfo{
      host_name       		hp_producao
      notes_url       		http://192.168.3.100
      icon_image      r		printer.png
      icon_image_alt  		HP_Producao
      vrml_image      		printer.png
      statusmap_image 		printer.gd2
      2d_coords       		300,700
      3d_coords       		200.0,50.0,75.0
      }

Os ícones utilizados pelo hostextinfo ficam armazenados em /usr/local/nagios/share/images/logos/, para o exemplo acima você pode utilizar o excelente pack de ícones fnagios, para tal faça o download do pack e extraia este para o diretório logos:

# wget http://www.intec.uni.cc/bin/fnagios/fnagios.tar.gz
# tar xvf fnagios.tar.gz
# cd fnagios
# mv equipaments/* /usr/local/nagios/share/images/logos
# mv other/* /usr/local/nagios/share/images/logos
# mv vendors/* /usr/local/nagios/share/images/logos

Instalando o Frontend Nuvola

O Nuvola é um tema completo para a interface web do Nagios, incluindo novos menus, imagens e logos. Faça o download do arquivo e copie-o para o diretório do Nagios:

# wget http://packzaitan.googlecode.com/files/nagios_skyns.tar.gz
# mv /usr/local/nagios/share /usr/local/nagios/share.bkp
# cp –R share /usr/local/nagios/

Assim como a interface original do Nagios, o Novula é composto basicamente por PHP e JavaScript, sendo assim, podemos configurar a sua interface ao nosso gosto, uma configuração simples que pode ser realizada é a alteração do seu menu lateral, fazendo com que determinado conjunto de menus fique expandido ou não logo na abertura da página do Nagios, para isso acesse o arquivo config.js, o arquivo de configuração do JavaScript do Nuvola:

# vim /usr/local/nagios/share/config.js
var homeMenuTitle       = "Home";
var homeMenuOpen        = false;

var monitMenuTitle      = "Monitoring";
var monitMenuOpen       = true;

var reportMenuTitle     = "Reporting";
var reportMenuOpen      = true;

var configMenuTitle     = "Configuration";
var configMenuOpen      = false;

Instalando o PNP4Nagios (Modo Síncrono)

O PNP4Nagios nos auxiliará (e muito) na geração de gráfico de diversos serviços checados pelo Nagios. Este criará gráficos diários, semanais, mensais, em fim, de acordo com a necessidade do administrador e possibilitando a geração de PDF deste conteúdo para a apresentação de um relatório, por exemplo.

Habilite o modulo mod_rewrite do Apache:

# a2enmod rewrite

Faça o download do pnp4nagios, compile e instale este:

# wget http://downloads.sourceforge.net/project/pnp4nagios/PNP-0.6/pnp4nagios-0.6.3.tar.gz?use_mirror=ufpr
# tar xvf pnp4nagios-0.6.3.tar.gz
# cd pnp4nagios-0.6.3
# ./configure
# make all
# make fullinstall

Habilite a leitura de dados no Nagios, acesse a seguinte linha do nagios.cfg e altere o valor desta para “1”:

# vim /usr/local/nagios/etc/nagios.cfg
...
process_performance_data=1
...

Ainda no arquivo nagios.cfg, adicione as seguintes linhas a este:

...
service_perfdata_command=process-service-perfdata
host_perfdata_command=process-host-perfdata
...

Por padrão, o pnp4nagios fará a geração de gráficos de todos os serviços checados (os que geram dados de performance), porém caso necessite que um determinado serviço não seja gerado gráfico, adicione a seguinte linha ao arquivo de monitoramento do host, no respectivo serviço que não deve ser gerado gráficos:

# vim /usr/local/nagios/etc/servidores/srv-linux.cfg
...
define service {
...
process_perf_data 0
...
}
...

Agora, adicione ao command.cfg as definições de leitura do pnp4nagios:

...
define command {
command_name    process-service-perfdata
command_line    /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl
}

define command {
command_name    process-host-perfdata
command_line    /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA
}
...

Teste o funcionamento do pnp4nagios acessando o endereço deste:

http://ip_do_servidor/pnp4nagios

Para integrar o pnp4nagios ao Nuvola, acesse o arquivo do ativo monitorado, e adicione as seguintes linhas a este:

# vim /usr/local/nagios/etc/servidores/srv-linux.cfg

Adicione as seguintes linhas aos serviços que terão os gráficos gerados pelo pnp4nagios:

define service {
...
action_url 	/pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
   register   	0
}

Agora, reinicie o serviço do Nagios e acesse a sua interface Web, observe que após o nome do serviço que foi adicionado a linha acima, agora possui o ícone de acesso ao pnp4nagios.

Notificações por email

Utilizaremos o aplicativo Email para o envio de notificações, para tal, faça o download do Email e instale este:

# wget http://webftp.seduc.ce.gov.br/Nagios/email-2.5.1.tar.gz
# tar xvf email-2.5.1.tar.gz
# cd email-2.5.1
# ./configure
# make
# make install

Após efetuar a instalação do Email, edite o arquivo email.conf alterando o servidor SMTP deste arquivo para o servidor de email local da sua empresa:

# vim /usr/local/etc/email/email.conf
...
SMTP_SERVER = ‘192.168.2.34’
...

Reinicie o serviço do Nagios e pronto, seguindo as definições que foram atribuídas ao arquivo contacts.cfg, o Email enviará todas as notificações do Nagios para o grupo ou contato definido no contacts.cfg.

# /etc/init.d/nagios restart

Conclusão

Eu publiquei este artigo originalmente no Viva o Linux a pouco mais de 1 ano, porém houveram algumas mudanças desde então, como alteração de links e correções devido a atualização natural dos pacotes. Espero que agora esteja 100%, mais qualquer problema, ou dúvida estarei a disposição.

Gostaria de agradecer mais uma vez a comunidade OpenSource brasileira que tem crescido a cada dia e com isso, compartilhamento conhecimento para geração de novos frutos.

Abraços.

Sobre Rafael Oliveira

Defensor dos fracos e oprimidos, pregador da palavra OpenSource e amante da boa leitura.

Publicado em julho 11, 2012, em Linux, Nagios e marcado como , , , , , , , . Adicione o link aos favoritos. 13 Comentários.

  1. Augusto Yamazaki

    Ola Rafael, primeiramente gostaria de agradece-lo por esse belo tutorial contudo estou com o erro abaixo ao tentar reiniciar o Nagios:

    Nagios Core 3.2.3
    Copyright (c) 2009-2010 Nagios Core Development Team and Community Contributors
    Copyright (c) 1999-2009 Ethan Galstad
    Last Modified: 10-03-2010
    License: GPL

    Website: http://www.nagios.org
    Reading configuration data…
    Read main config file okay…
    Processing object config file ‘/usr/local/nagios/etc/objects/commands.cfg’…
    Error: Invalid command object directive ‘$NOTIFICATIONTYPE$\nHost:’.
    Error: Could not add object property in file ‘/usr/local/nagios/etc/objects/commands.cfg’ on line 9.
    Error processing object config files!

    ***> One or more problems was encountered while processing the config files…

    Check your configuration file(s) to ensure that they contain valid
    directives and data defintions. If you are upgrading from a previous
    version of Nagios, you should be aware that some variables/definitions
    may have been removed or modified in this version. Make sure to read
    the HTML documentation regarding the config files, as well as the
    ‘Whats New’ section to find out what has changed.
    ***********************************

    Segue tambem uma parte do arquivo commands.cfg:

    ###############################################################################
    # Arquivo commands.cfg > Por Rafael Oliveira em 15/12/2010
    #
    ################################################################################
    #Notificacao por email
    define command{
    command_name notify-host-by-email
    command_line /usr/bin/printf “%b” “***** Nagios *****\n\nNotification Type:
    $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nEstado: $HOSTSTATE$\nIP: $HOSTADDRESS$\nInfo:
    $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n” | /usr/bin/email -s “** $NOTIFICATIONTYPE$ Host Alert:
    $HOSTNAME$ is $HOSTSTATE$ **” $CONTACTEMAIL$
    }
    define command{
    command_name notify-service-by-email
    command_line /usr/bin/printf “%b” “***** Nagios *****\n\nNotification Type:
    $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState:
    $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$” |
    /usr/bin/email -s “** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$
    **” $CONTACTEMAIL$
    }

  2. Bom dia Rafael!!!

    Primeiramente parabéns pelo tutorial, muito bom mesmo!!!

    Agora deixe-me tirar algumas dúvidas com vc por favor…

    Estou utilizando o ubuntu server 12.04…

    Segui seu tutorial passo a passo, mas na hora de instalar o NRPE deu um erro e não consigo sair dele… tem como me dar uma ajuda por favor…

    root@Matrix:~# apt-get install xinetd
    Lendo listas de pacotes… Pronto
    Construindo árvore de dependências
    Lendo informação de estado… Pronto
    xinetd já é a versão mais nova.
    0 pacotes atualizados, 0 pacotes novos instalados, 0 a serem removidos e 4 não atualizados.
    root@Matrix:~# cd downloads
    root@Matrix:~/downloads# ls
    nagios nagios-plugins-1.4.16.tar.gz net-snmp-5.6.1.tar.gz
    nagios-3.4.1.tar.gz nagios-snmp-plugins.1.1.1.tgz nrpe-2.12
    nagios-plugins-1.4.16 net-snmp-5.6.1 nrpe-2.12.tar.gz
    root@Matrix:~/downloads# cd nrpe-2.12
    root@Matrix:~/downloads/nrpe-2.12# ./configure
    checking for a BSD-compatible install… /usr/bin/install -c
    checking build system type… i686-pc-linux-gnu
    checking host system type… i686-pc-linux-gnu
    checking for gcc… gcc
    checking for C compiler default output file name… a.out
    checking whether the C compiler works… yes
    checking whether we are cross compiling… no
    checking for suffix of executables…
    checking for suffix of object files… o
    checking whether we are using the GNU C compiler… yes
    checking whether gcc accepts -g… yes
    checking for gcc option to accept ANSI C… none needed
    checking whether make sets $(MAKE)… yes
    checking how to run the C preprocessor… gcc -E
    checking for egrep… grep -E
    checking for ANSI C header files… yes
    checking whether time.h and sys/time.h may both be included… yes
    checking for sys/wait.h that is POSIX.1 compatible… yes
    checking for sys/types.h… yes
    checking for sys/stat.h… yes
    checking for stdlib.h… yes
    checking for string.h… yes
    checking for memory.h… yes
    checking for strings.h… yes
    checking for inttypes.h… yes
    checking for stdint.h… yes
    checking for unistd.h… yes
    checking ctype.h usability… yes
    checking ctype.h presence… yes
    checking for ctype.h… yes
    checking dirent.h usability… yes
    checking dirent.h presence… yes
    checking for dirent.h… yes
    checking errno.h usability… yes
    checking errno.h presence… yes
    checking for errno.h… yes
    checking fcntl.h usability… yes
    checking fcntl.h presence… yes
    checking for fcntl.h… yes
    checking getopt.h usability… yes
    checking getopt.h presence… yes
    checking for getopt.h… yes
    checking grp.h usability… yes
    checking grp.h presence… yes
    checking for grp.h… yes
    checking for inttypes.h… (cached) yes
    checking netdb.h usability… yes
    checking netdb.h presence… yes
    checking for netdb.h… yes
    checking pwd.h usability… yes
    checking pwd.h presence… yes
    checking for pwd.h… yes
    checking signal.h usability… yes
    checking signal.h presence… yes
    checking for signal.h… yes
    checking for stdint.h… (cached) yes
    checking for strings.h… (cached) yes
    checking for string.h… (cached) yes
    checking syslog.h usability… yes
    checking syslog.h presence… yes
    checking for syslog.h… yes
    checking tcpd.h usability… no
    checking tcpd.h presence… no
    checking for tcpd.h… no
    checking for unistd.h… (cached) yes
    checking arpa/inet.h usability… yes
    checking arpa/inet.h presence… yes
    checking for arpa/inet.h… yes
    checking netinet/in.h usability… yes
    checking netinet/in.h presence… yes
    checking for netinet/in.h… yes
    checking socket.h usability… no
    checking socket.h presence… no
    checking for socket.h… no
    checking for sys/types.h… (cached) yes
    checking sys/time.h usability… yes
    checking sys/time.h presence… yes
    checking for sys/time.h… yes
    checking sys/resource.h usability… yes
    checking sys/resource.h presence… yes
    checking for sys/resource.h… yes
    checking for sys/wait.h… (cached) yes
    checking sys/socket.h usability… yes
    checking sys/socket.h presence… yes
    checking for sys/socket.h… yes
    checking for sys/stat.h… (cached) yes
    checking for an ANSI C-conforming const… yes
    checking whether struct tm is in sys/time.h or time.h… time.h
    checking for mode_t… yes
    checking for pid_t… yes
    checking for size_t… yes
    checking return type of signal handlers… void
    checking for uid_t in sys/types.h… yes
    checking type of array argument to getgroups… gid_t
    checking for int… yes
    checking size of int… 4
    checking for short… yes
    checking size of short… 2
    checking for long… yes
    checking size of long… 4
    checking for uint32_t… yes
    checking for u_int32_t… yes
    checking for int32_t… yes
    checking for va_copy… yes
    checking for vsnprintf… yes
    checking for snprintf… yes
    checking for asprintf… yes
    checking for vasprintf… yes
    checking for C99 vsnprintf… yes
    checking for getopt_long… yes
    checking for main in -lnsl… yes
    checking for socket in -lsocket… no
    checking for main in -lwrap… no
    checking for strdup… yes
    checking for strstr… yes
    checking for strtoul… yes
    checking for initgroups… yes
    checking for closesocket… no
    checking for socklen_t… yes
    checking for type of socket size… size_t
    checking for SSL headers… SSL headers found in /usr
    checking for SSL libraries… configure: error: Cannot find ssl libraries
    root@Matrix:~/downloads/nrpe-2.12# make all
    make: *** Sem regra para processar o alvo `all’. Pare.
    root@Matrix:~/downloads/nrpe-2.12#

    • Alexander, faça o seguinte..
      Depois do comando #cd nrpe-2.12, instale as bibliotecas ssl com o comando:

      # apt-get install libssl-dev

      Após só de um #make clean e compile e instale novamente com o #./configure, #make all, etc.
      Abs!

  3. Rafael, eu já tinha instalado o libssl-dev… mas quando dou o comando make aparece o seguinte…

    root@Matrix:~/downloads# cd nrpe-2.12
    root@Matrix:~/downloads/nrpe-2.12# make clean
    make: *** Sem regra para processar o alvo `clean’. Pare.
    root@Matrix:~/downloads/nrpe-2.12#

    O que pode ser???

    Abs,

    Alexander

  4. Marcos A. Gouveia

    Marcos

    Boa tarde, Alexandre.

    Não sei se vc esta com o problema ai postado, tenta este comando, dentro da pasta nrep

    ./configure –with-ssl=/usr/bin/openssl –with-ssl-lib=/usr/lib/i386-linux-gnu

    Kernel-hearders:

    apt-cache search linux-headers-$(uname -r) pra ve se tem o pacote, se tiver:
    apt-get install linux-headers-$(uname -r)

  5. Estou com o mesmo problema do Alexander.!!!

  6. Rafael, segui os procedimentos de instalação, mas na hora do comando make install-webconf aparece o seguinte erro:
    ~/nagios/nagios-3.2.3# make install-webconf
    /usr/bin/install -c -m 644 sample-config/httpd.conf /etc/httpd/conf.d/nagios.conf
    /usr/bin/install: não foi possível criar arquivo comum “/etc/httpd/conf.d/nagios.conf”: Arquivo ou diretório não encontrado
    make: ** [install-webconf] Erro 1

    Ja fiz o procedimento conforme estava no forum do VOL, mais o erro ainda persiste. Sabe o que pode ser ?

  7. Rafael parabéns…..seu tutorial esta muito bem elaborado.

    Na preparação esta informado para termos LAMP instalado, porém não
    vi em nenhum lugar a utilização do MySql.
    Neste tutorial ele não é utilizado?
    obrigado

  8. Claudio Henrique

    Cara, parabéns pelo tutorial, vou segui-lo passo a passo pois estou tendo algumas dificuldades, mas ficou excelente, parabéns mesmo.

Deixe um comentário